const { promisify } = require('util');
const { getOptions } = require('loader-utils')
const { validate } = require('schema-utils');
const babel = require('@babel/core');
const schema = require('./babelLoader.json');

module.exports = function (content, map, meta) {
  // 获取babel 配置时的参数
  const options = getOptions(this);
  console.log('[options]---', options);

  // 校验参数
  validate(schema, options, {
    name: 'babelLoader'
  });

  const callback = this.async();

  // 将普通的异步babel.transform 函数转换为promise 的异步函数
  const transform = promisify(babel.transform);

  // 执行转换
  transform(content, options)
    .then(({ code, map }) => {
      // 返回结果
      callback(null, code, map)
    })
    .catch(e => {
      callback(e)
    })
}